﻿var TableMessage=new Array();
TableMessage[0] = 'Komunikat z serwisu';  //Status umieszczany przez administratorów serwisu do wszystkich użytkowników.
TableMessage[1] = 'Nowy post';  //W grupie, w której jest osoba napisano nowy post.  
TableMessage[2] = 'Nowy temat';  //W grupie, w której jest osoba założono nowy temat.
TableMessage[3] = 'Dołaczył do grupy';  //Znajomy dołączył do grupy
TableMessage[4] = 'Dodał zdjęcie';  //Znajomy dodał nowe zdjęcie do galerii
TableMessage[5] = 'Zaktualizował CV'; //Znajomy zaktualizował CV
TableMessage[6] = 'Firma została oceniona/skomentowana'; //Firma, którą użytkownik ma w CV lub lubi została oceniona i skomentowana
TableMessage[7] = 'Dodano zdjęcie firmy'; //Firma, którą użytkownik ma w CV lub lubi dodała zdjęcie do galerii
TableMessage[8] = 'Dostałeś zaproszenie do grupy'; //Użytkownik dostał zaproszenie do grupy
TableMessage[9] = 'Publiczna wiadomość od użytkownika'; //Status dodany przez użytkownika
TableMessage[10] = 'Skomentowano Twoje zdjęcie'; //Zdjęcie użytkownika zostało skomentowane
TableMessage[11] = 'Zacytowano Twoją wypowiedź'; //Chwilowo nie używane
TableMessage[12] = 'Zostałeś przyjęty do grupy'; //Użytkownik został przyjęty do grupy, do której się zgłosił.
TableMessage[13] = 'Zmiana profilu firmy'; //Firma, którą użytkownik się opiekuje zmieniła typ profilu.

var FLAG_GROUP=8;
var FLAG_UNGROUP=0;
var FLAG_SHOW_COMMENTS=16;
var FLAG_SHOW_ADD_COMMENT_INPUT=32;

var allMessageStatusTable; //Kolejka z statusami do wyswietlenia
var MessageStatusTable=new Array(); //Tablica z pogrupowanymi statusami

var iShowElements=0; //Licznik aktualnie pokazujacy ilosc elementow zczytanych z allMessageStatusTable
//var dtUpdateTime=null; //Czas ostatniego pobrania danych z bazy
var iUserPhoto='/images/images.jpg';
var iUserID=1;

//Sciezki do obrazkow rozszezen plikow 
var atFileExt = new Object();
atFileExt["txt"] = '/images/images.jpg';
atFileExt["exe"] = '/images/images.jpg';
atFileExt["rar"] = '/images/images.jpg';
atFileExt["zip"] = '/images/images.jpg';
atFileExt["pdf"] = '/images/images.jpg';


//iUID - tablica urzytkownika do pokazania
function InitBoard(iUID)
{	
	iUserID=iUID;
	checkUpdate(true);
	
	//setInterval("UpdateTimeDate()",1000);		
	setInterval(function(){UpdateTimeDate();},5000);


//-----------------------------------------------------------------------------
    $('.board_shere_status').click(function() {
        $('.board_form').hide();
        $('#status_form').show();
        var options = {
            success:       function(data){
                $('#boarditems').prepend(data);
            },
            resetForm: true
        };
        $('#statusform').ajaxForm(options);
    });

//-----------------------------------------------------------------------------
	$('.board_shere_photo').click(function() {
        $('.board_form').hide();
        $('#image_form').show();
        var options = {
            success:       function(data){
                $('#boarditems').prepend(data);
            },
            resetForm: true
        };
        $('#photoform').ajaxForm(options);
    });

//-----------------------------------------------------------------------------
	$('.board_shere_file').click(function() {
        $('.board_form').hide();
        $('#file_form').show();
        var options = {
            success:       function(data){
                $('#boarditems').prepend(data);
            },
            resetForm: true
        };
        $('#fileform').ajaxForm(options);
    });
//----------------------------------------------------------------------------


	$('.board_shere_link').click(function()
	{
        $('.board_form').hide();
        $('#link_form').show();
        var options = {
            success:       function(data){
                if (obj = jQuery.parseJSON(data)) {
                    $('#link_form').find('.error').text(obj.error);
                } else {
                    AnalizeLinkDialog(data);
                }
            },
            resetForm: true
        };
        $('#linkform').ajaxForm(options);
    });

}

//Zmienia pasek dodawania statusow na pasek ladowania
function LoadingAddSection()
{
	$(".board_add_section").empty();
	$(".board_add_section").append(
	"<div class='board_loading_div'>"+
	"<b>Trwa ładowanie...</b><br /><img src='/images/load.gif' />"+
	"</div>");
}

//Funkcja obslugujaca przeanalizowany link
function AnalizeLinkDialog(data)
{

		var lo=new LinkObject(data);
		var icurImg=0;
		$(".board_add_section").empty();
		var text=
		'<form id="exclinkform" style="text-align:right">'+
		'<table style="text-align:left;width:100%">'+
		'<tr>'+
		'<td rowspan="3">'+
		'<img id="'+icurImg+'" class="board_ext_link_image" src="'+lo.GetObject(icurImg).GetImage()+'" />'+
		'<img id="board_ext_load_img" style="display:none" src="/images/load.gif" />'+
		'</td>'+
		'<td id="exclinkformtitle">'+lo.GetTitle()+'</td>'+				
		'</tr>'+
		
		'<tr>'+		
		'<td id="exclinkformurl">'+lo.GetPageUrl()+'</td>'+				
		'</tr>'+
		
		'<tr>'+		
		'<td id="exclinkformdesc">'+lo.GetDesc()+'</td>'+				
		'</tr>'+
		
		'<tr>'+
		'<td></td>'+
		'<td><input class="board_ext_link_prev" type="button" value="<" /><input class="board_ext_link_next" type="button" value=">" />\
		<b class="board_ext_link_cur_image">1</b> z '+lo.GetCount()+' Wybierz miniaturę <br />\
		<input class="board_ext_link_checkbox" type="checkbox" value="Brak miniatury" />Brak miniatury</td>'+				
		'</tr>'+
		
		'</table>'+
		'<br />'+
		'<div class="board_add_exec">'+
		'<label>Napisz coś o linku:</label>'+
		'<input id="linkformtext" style="width: 99%" type="text" /><br />'+
		'<input class="modern_button" type="submit" value="zalacz" />'+
		'</div>'+
		'</form>';
		
		
		
		$(".board_add_section").append(text);
		
		$(".board_ext_link_checkbox").click(function(){
			if($(this).is(':checked')) 
			{
				$(".board_ext_link_image").hide();
			}else{
				$(".board_ext_link_image").show();
			}	
		});
		
		$(".board_ext_link_prev").attr('disabled', 'disabled');
		
		//Brak obrazow/filmow blokujemy przyciski nastepny/poprzedni
		if(lo.GetCount()<2)
			$(".board_ext_link_next").attr('disabled', 'disabled');
		
		//Obsluga przycisku nastepny: 
		$(".board_ext_link_next").click(function()
		{
			if(icurImg<(lo.GetCount()-1))
				icurImg++;
			
			if(icurImg==(lo.GetCount()-1))
				$(this).attr('disabled', 'disabled');
			
			$("#board_ext_load_img").show();			
			var imgl=$(".board_ext_link_image");		
			imgl.css('display', 'none');			
			imgl.attr('id',icurImg);
			imgl.attr('src',lo.GetObject(icurImg).GetImage()).load(function(){
				$("#board_ext_load_img").hide();
				imgl.show();				
            });
			
			$(".board_ext_link_prev").removeAttr('disabled');	
			$(".board_ext_link_cur_image").text(icurImg+1);
		});
		
		//Obsluga przycisku nastepny
		$(".board_ext_link_prev").click(function()
		{
			if(icurImg!=0)
				icurImg--;
			
			if(icurImg==0)
				$(this).attr('disabled', 'disabled');
			
			$("#board_ext_load_img").show();			
			var imgl=$(".board_ext_link_image");		
			imgl.css('display', 'none');			
			imgl.attr('id',icurImg);
			imgl.attr('src',lo.GetObject(icurImg).GetImage()).load(function(){
				$("#board_ext_load_img").hide();
				imgl.show();
            });
			
			$(".board_ext_link_next").removeAttr('disabled');//Odblokujemy przycisk "poprzedni"
			$(".board_ext_link_cur_image").text(icurImg+1);//Zminiamy wartosc tekstu "1 z 12"
		});	
		
		//Wystlamy status z wybranym obrazkiem na server
		$("#exclinkform").submit(function()
		{
			
			var content=$("#linkformtext").val();
			
			var imagelink='';
			var sExtd='';
			
			if(!($(".board_ext_link_checkbox").is(':checked'))) 
			{				
				if(lo.GetObject(icurImg).GetType()=='image')
				{
					imagelink=lo.GetObject(icurImg).GetImage();
				}else{
					imagelink=lo.GetObject(icurImg).GetVideo();//Link do filmu
					sExtd=lo.GetObject(icurImg).GetImage();//Link do obrazka (youtube)
				}
			}	
			var sDesc=$("#exclinkformdesc").text();
			var sTitle=$("#exclinkformtitle").text();
			var sPage=lo.GetPageUrl();


            $('#board_main').hide();
            $('#status_loader').show();
			$.post('/board/AddLink/',{text:content,uri:imagelink,desc:sDesc,title:sTitle,page:sPage,extd:sExtd}, function(data){
                $('#boarditems').prepend(data);
                $('#board_main').show();
                $('#status_loader').hide();
			});
			
			return false;
		});	
		
		
//	});
}

//Zaktualizuj czas na statusach i w komentarzach
function UpdateTimeDate()
{
	var chobj=$("#boarditems").children();
	
	$("#boarditems").children(".board_status_section").each(function() {    
		var child=GetObjectClass(this.id,4);
					
		//Aktalizacja czasu statusu
		$(this).find(".board_status_time_fieald").each(function()
		{
			$(this).text(transformDate(child.GetDate()));
			
		});
		
		//Aktualizacja czasu widocznych kometarzy
		var comments=child.GetComments();	
	
		$(this).find(".board_time_fieald").each(function()
		{
			//Pobieramy id
			var last=this.id.lastIndexOf('_');
			var com_id=this.id.substr(last+1,this.id.length);
			com_id=parseInt(com_id);
			$(this).text(transformDate(comments.GetElement(com_id).GetDate()));
		});
	});
	
	
}


//Pobieramy statusy z bazy
function checkUpdate()
{
		for(var i=0;i<14;i++)
			MessageStatusTable[i]=new Stack(FLAG_GROUP);
		
		MessageStatusTable[9]=new Stack(FLAG_UNGROUP);	
	
		
        $.post('/board/ReciveStatus',{userid:iUserID}, function(data){

            //Pobrane statusy umieszczamy odpowiednich grupach
            $(data).find("message").each(function () {
                var sm=new StatusMessage(this);
                MessageStatusTable[sm.GetStatusType()].Push(sm);
            });

            //Zapisujemy info o aktualnie zalogowanym uzytkowniku
            $(data).find("user").each(function () {
                iUserPhoto==$(data).find("photo").text();
            });

            consolideStatus();//Laczymy poszczegolne grupy
            ShowMessages(); //Wyswietlamy statusy
        });
}

//Ukrywanie statusow
function hideStatus()
{		
	ConfrimDialog($(this).data('pid'),"Czy na pewno chcesz ukryć ten post?","Ukrywanie postu",function(this_obj)
	{
		var child=GetObjectClassByID(this_obj);//Pobieramy obiekt z odpowiedniego stosu
		var statusType=child.GetStatusType();
		var statusId=child.GetMessageId();
		
		ShowLoadingDialog(this_obj,true);	
		
		$.post('/board/HideStatus',{id:statusId}, function(data)
		{
			MessageStatusTable[statusType].RemoveElement(GetObjectClassPosition(this_obj,4,false));	
			consolideStatus();
			ShowMessages();		
		});
	});
}

function OnMouseOverStatus()
{	
	$(this).find('.board_ext_ContextMenu').each(function(){	
		$(this).show();
	});
	
}

function OnMouseOutStatus()
{	
	var this_var=this;
	$(this).find('.board_ext_ContextMenu').each(function(){			
			$(this).hide();
	});	
}

function ShowStatusContextMenu()
{
	var child=GetObjectClassByID(this);
	var statusType=child.GetStatusType();	
	var x = Math.floor($(this).offset().left);
	var y = Math.floor($(this).offset().top);
	var this_obj=this;
	
	$("#boarditems").prepend('<div class="menublanket">'+
	'<div class="fullscreendivbackground2"></div>'+
			'<div class="menu bubplastic vertical">'+
			'<ul>'+
				(((child.GetPermission()&child.SPF_LOCK) && (statusType>0))?"<li class='board_contextmenu'><span class='board_lock_status' title='Blokuj'>Blokuj</span></li>":"") +
				((child.GetPermission()&child.SPF_HIDE)?"<li class='board_contextmenu'><span class='board_hide_status' title='Ukryj'>Ukryj</span></li>":"") +
				((child.GetPermission()&child.SPF_DELETE)?"<li class='board_contextmenu'><span class='board_delete_status' title='Usun'>Usuń</span></li>":"")+
			'</ul>'+
			'<br class="clearit" />'+
		'</div>'+
		'</div>');
	
	$(".board_delete_status").data('pid',GetTopParent(this_obj));
	$(".board_delete_status").click(deleteStatus);
	
	$(".fullscreendivbackground").height($("body").height()+80);
	$(".menublanket").click(function(){$(this).remove();});
	
	$(".menu").offset({ top: y, left: x });
	/*
	var iWidth=$("#"+id+"dgl").width(iWidth);
	var iHeight=$("#"+id+"dgl").height(iHeight);
	
	 var halfsc = $(window).height()/2;
	 var halfscrn = $(window).width()/2;
	
	$(".fullscreendivbackground").height($("body").height()+80);
	
	
	$("#"+id+"dgl").offset({ top: (halfsc-iHeight/2)+$(window).scrollTop(), left: (halfscrn-iWidth/2) });
	*/
	
	/*$(this).parent().children('.menu').each(function(){
		$(this).offset({ top: y, left: x });
		$(this).css('z-index','1011');
		$(this).show();
	});*/
}

function HideStatusContextMenu()
{
	
	//$(this).offset({ top: 0, left: 0 });
	//$(this).hide();
	
}

//Usuwamy status
function deleteStatus()
{	
	ConfrimDialog($(this).data('pid'),"Czy na pewno chcesz usunąć ten post?","Usuń post",function(this_obj)
	{
	
		var child=GetObjectClassByID(this_obj);
		var statusType=child.GetStatusType();
		var statusId=child.GetMessageId();
				
		ShowLoadingDialog(this_obj,true);	
		$.post('/board/DeleteStatus',{id:statusId}, function(data) {
			MessageStatusTable[statusType].RemoveElement(GetObjectClassPosition(this_obj,4,false));	
			consolideStatus();
			ShowMessages();		
		});
	});
	
	
}

//Blokowanie statusu
function blockStatus()
{
	
	ConfrimDialog($(this).data('pid'),"Czy na pewno chcesz blokować ten typ postów?","Blokowanie postów",function(this_obj)
	{	
		var child=GetObjectClassByID(this_obj);
		var statusType=child.GetStatusType();
		var statusId=child.GetMessageId();
		
		ShowLoadingDialog(this_obj,true);
		
		$.post('/board/BlockStatus',{id:statusId}, function(data)
		{
			if(statusType==9)
			{		
				MessageStatusTable[statusType].RemoveElement(GetObjectClassPosition(this_obj,4,false));
			}else{				
				MessageStatusTable[statusType]=new Stack(FLAG_GROUP);
			}
			consolideStatus();
			ShowMessages();
		});
	});
}

//Generowanie html obiektow zalaczonych do statusu
//Zwraca: kod html obiektu
function addObject(child)
{
	var type=child.GetObjectType();
	var text="";
	
	if(type=='image')
	{
		text+='<div class="board_linked">';
			text+='<div class="board_comment_img">';
				text+='<img class="board_ext_show_image_fullscreen" src="'+child.GetObjectUrl()+'" />';	
			text+='</div>';
			text+='<div class="board_comment_div">';	
				text+='<a href="'+child.GetObjectPage()+'" target="_blank" <strong class="board_descobject">'+child.GetObjectTitle(child)+'</strong></a><br />';
			text+='</div>';
			text+='<div class="board_comment_div">';
				text+='<i class="board_descobject">'+child.GetObjectHomePage()+'</i><br /><br />';
			text+='</div>';
			text+='<div class="board_comment_div">';
				text+='<i class="board_descobject">'+child.GetObjectDesc()+'</i>';
			text+='</div>';
		text+='</div>';
	}else if(type=='video'){
		
		text+='<div class="board_linked">';
		
		if(child.GetObjectUrl())
		{
			text+='<div class="board_ext_show_video" style="cursor:pointer;background-image: url('+Url.decode(child.GetExtData())+');width:120px;height:90px;vertical-align:bottom;">';
				
				text+='<embed style="display: none" width="0" height="0" ';
				text+='flashvars="width=398&height=224" wmode="opaque"';
				text+='salign="tl" allowscriptaccess="never" ';
				text+='allowfullscreen="true" scale="scale" ';
				text+='quality="high" bgcolor="#FFFFFF" ';
				text+='src="'+Url.decode(child.GetObjectUrl())+'?version=3&autohide=1" ';
				text+='type="application/x-shockwave-flash">';
		
				text+='<img src="/images/play.png" />';	
		
			text+='</div>';
		}
		text+='<div class="board_comment_div">';	
			text+='<a href="'+child.GetObjectPage()+'" target="_blank" <strong class="board_descobject">'+child.GetObjectTitle(child)+'</strong></a><br />';
		text+='</div>';
		text+='<div class="board_comment_div">';
			text+='<i class="board_descobject">'+child.GetObjectHomePage()+'</i><br /><br />';
		text+='</div>';
		text+='<div class="board_comment_div">';
			text+='<i class="board_descobject">'+child.GetObjectDesc()+'</i>';
		text+='</div>';
	  text+='</div>';
	  
	}else if(type=='file'){		
		var ext=child.GetObjectUrl(child).split('.');
				
		text+='<div class="board_linked">';
		text+='<div class="board_comment_img">';
			text+='<a href="'+child.GetObjectUrl()+'">';
				if(IsStringEmpty(atFileExt[ext[1]]))
				{
					text+='<img src="'+atFileExt[ext[1]]+'" />';	
				}else{
					text+='<img src="/images/unkown_ext.jpg" />';	
				}
			text+='</a>';
		text+='</div>';
		text+='<div class="board_comment_div">';	
			text+='<a href="'+child.GetObjectPage()+'" target="_blank" <strong class="board_descobject">'+child.GetObjectTitle(child)+'</strong></a><br />';
		text+='</div>';
		text+='<div class="board_comment_div">';
			text+='<i class="board_descobject">'+child.GetObjectHomePage()+'</i><br /><br />';
		text+='</div>';
		text+='<div class="board_comment_div">';
			text+='<i class="board_descobject">'+child.GetObjectDesc()+'</i>';
		text+='</div>';
	text+='</div>';
	}else if(type=='photo')
	{
		text+='<div class="board_linked">';
			text+='<div class="board_comment_img">';
				text+='<img class="board_ext_show_image_fullscreen" src="'+child.GetObjectUrl()+'" />';	
			text+='</div>';
		text+='</div>';
	}
	return text;	
}

//Pokaz/ukryj elementy grup
function ShowGroup()
{		
	var child=GetObjectClassByID(this);
	var idType=child.GetStatusType();
	
	if(MessageStatusTable[idType].GetData()&FLAG_GROUP)
		MessageStatusTable[idType].SetData(MessageStatusTable[idType].GetData()-FLAG_GROUP);
	else	
		MessageStatusTable[idType].SetData(MessageStatusTable[idType].GetData()|FLAG_GROUP);
	
	ShowMessages(false);
}

var nazwy_mies = [ 'Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj','Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 
                   'Listopad', 'Grudzień' ];

var nazwy_dni=['niedziela','poniedziałek','wtorek','środa','czwartek','piątek','sobota'];



//Zamienia date na informacje jaki czas temu dodano post (do 24h)(ustawione dla testow co 5s)
//dt - data do zamiany
function transformDate(dt)
{	
	var str_rez="";
	var kt=dt.split(':');		
	Stamp = new Date();	
	var zero=(Stamp.getFullYear()-ConvertToInt(kt[2]))+(Stamp.getMonth()-ConvertToInt(kt[1])+1)+(Stamp.getDate()-ConvertToInt(kt[0]));
	
	if(zero==0)//Ten sam dzien
	{
		//Obliczamy roznice sekund miedzy aktualna data a utworzenia statusu
		var koka=(Stamp.getHours()-ConvertToInt(kt[3]))*3600+(Stamp.getMinutes()-ConvertToInt(kt[4]))*60+(Stamp.getSeconds()-ConvertToInt(kt[5]));
		
		if(koka<60)
		{
			str_rez=koka+' sekund(y) temu';
		}else if(koka<3600)
		{
			str_rez=Math.floor(koka/60)+' minut(y) temu';
		}else{
			str_rez=Math.floor(koka/3600)+' godz. temu';
		}

	}else{//Ponad 24h, wiec wyswietlamy date normalnie (gdy rok utworzenia i aktualny jest taki sam to wyswietlanie roku jest pomijane)
		str_rez=(kt[0]+' '+nazwy_mies[ConvertToInt(kt[1])-1]+' '+((Stamp.getFullYear()!=kt[2])?kt[2]:""));
	}
	
	return str_rez;
}


//funkcja dodajaca do bazy comentarz
//e - event
function AddComment(e)
{	

 if(e.keyCode == 13 || e.type === 'blur')//Po nacisnieciu enter lub straceniu ogniska (focus)
 {
	var txt=$(this).val();

	if(!txt.length)//Nie dodajemy pustych statusow
		return false;
	else
		$(this).attr('disabled', 'disabled');//Blokujemy nastepne komunikaty zapobiegajac dodania kolejnych tychsamych kometarzy
	
	//txt=Url.encode(txt);
	var child=GetObjectClassByID(this);	
	var idMess=child.GetMessageId();
	var jObj=GetCommentSection(this);//Jquery tagu sekcji komentarza 
	var jSatObj=GetStatusSection(this);//Jquery tagu sekcji statusu
	
	//Pasek ladowania informujacy ze dodawany jest komentarz
	jObj.find(".board_comment_loading_fieald").append("<img src='/images/load.gif' />");
		
		//wystlamy kometarz oraz odbieramy liste wszystkich kometarzy
		$.post('/board/AddComment',{id:idMess,text:txt}, function(data) {
					
			child.RemoveAllComments();
			
			$(data).find("comment").each(function (){
				child.AddComment(this);				
			});
			
			jObj.empty();
			jObj.append(generateComents(child));
			$(".board_remove_comment").click(RemoveComment);
			$(".board_addcoment_input").keyup(AddComment);
			$(".board_addcoment_input").blur(AddComment);
			
			
			
			if(child.GetComments().GetCount()==2)
			{
				$("<u class='board_show_other_comment'>Pokaz komentarze ("+child.GetComments().GetCount()+")</u>").insertAfter(jSatObj.find('.board_status_time_fieald'));
				$(".board_show_other_comment").click(ShowComents);
			}else if(child.GetComments().GetCount()>1)
			{
				jSatObj.find('.board_show_other_comment').replaceWith("<u class='board_show_other_comment'>Pokaz komentarze ("+child.GetComments().GetCount()+")</u>");
			}
			
			//Przesortuj statusy i je wyswietl
			//child.SetUpdateDate(child.GetComments().GetLastElement().GetDate());
			//ShowMessages(true);
	});
 }
}

//funkcja wyswietlajaca formularz do dodawania komentarzy
function ShowAddCommentDialog()
{		
	var child=GetObjectClassByID(this);
	if(!child.IsUserFlag(FLAG_SHOW_ADD_COMMENT_INPUT))//Czy jest juz wyswietlony formularz
	{
		child.AddUserFlag(FLAG_SHOW_ADD_COMMENT_INPUT);
		var jObj=GetCommentSection(this);
		jObj.empty();
		jObj.append(generateComents(child));
		$(".board_remove_comment").click(RemoveComment);
		$(".board_addcoment_input").keyup(AddComment);
		$(".board_addcoment_input").blur(AddComment);
	}	
	GetAddCommentInput(this).focus();
}

//Generuje unikalny ID dla tagow html
function GenerateUniqueID()
{
	return ("guid_" + (new Date()).getTime());
}


//Okienko z animacja ladowania sie elementu
//tn - pokaz/ukryj (boolean)
//obj - id okienka (tn==false) lub id tagu wzgledem ktorego bedzie pokazywane okienko (tn==true)
//Zwraca: id wyswietlonego okna
function ShowLoadingDialog(obj,tn)
{	
	if(tn)
	{
			
		var id=GenerateUniqueID();
		/*var iWidth=323;
		var iHeight=100;
	
		var x = Math.floor($(obj).parent().offset().left)-iWidth/2;
		var y = Math.floor($(obj).parent().offset().top)-iHeight/2;
		
		x=(x<0)?0:x;
		y=(y<0)?0:y;
		
		$("#boarditems").append('<div id="'+id+'" class="board_loading_dialog" style="position:absolute;left: '+x+'px; top: '+y+'px; width: 323px;height:100px"><b>Operacja w toku...</b><br /><img src="/images/load.gif" /></div>');
		*/
		
		$("#boarditems").append('\
				<div id="'+id+'" class="fullconfrim">\
				<div class="fullscreendivbackground"></div>\
				<div id="'+id+'dgl" class="confrim_dialog">\
				<div class="confrim_dialog_inside">\
				<div class="confrim_dialog_title">Operacja w toku...</div>\
				<div class="confrim_dialog_body">\
				<img src="/images/load_more.gif" />\
				</div>\
				</div>\
				</div>\
				</div>');
			
			
			var iWidth=$("#"+id+"dgl").width(iWidth);
			var iHeight=$("#"+id+"dgl").height(iHeight);
			
			 var halfsc = $(window).height()/2;
			 var halfscrn = $(window).width()/2;
			
			$(".fullscreendivbackground").height($("body").height()+80);
			
			
			$("#"+id+"dgl").offset({ top: (halfsc-iHeight/2)+$(window).scrollTop(), left: (halfscrn-iWidth/2) });		
		
		return id;
	}else{
		 $('#'+obj).remove();
	}
}

//Okno dialogowe do potwierdzania akcji
//cookie - id tagu wzgledem ktorego obliczana jest pozycja okna, 
//str - tresc w oknie
//title - tekst na belke okna
//callback - funkcja ktora jest wywolywana gdy zostal nacisniety przycisk potwierdzenia
function ConfrimDialog(cookie,str,title,callback)
{
	var id=GenerateUniqueID();	
	var id_ok=GenerateUniqueID()+'ok';
	var id_cancel=GenerateUniqueID()+'cancel';
		
	$("#boarditems").append('\
		<div class="fullconfrim">\
		<div class="fullscreendivbackground"></div>\
		<div id="'+id+'" class="confrim_dialog">\
		<div class="confrim_dialog_inside">\
		<div class="confrim_dialog_title">'+title+'</div>\
		<div class="confrim_dialog_body">'
		+str+
		'</div>\
		<div class="confrim_dialog_button_bar">\
		<input class="confrim_dialog_button" id="'+id_ok+'" type="button" value="Tak" />\
		<input class="confrim_dialog_button" id="'+id_cancel+'" type="button" value="Nie" />\
		</div>\
		</div>\
		</div>\
		</div>');
	
	
	var iWidth=$("#"+id).width(iWidth);
	var iHeight=$("#"+id).height(iHeight);
	
	 var halfsc = $(window).height()/2;
	 var halfscrn = $(window).width()/2;
	
	$(".fullscreendivbackground").height($("body").height()+80);
	
	
	$("#"+id).offset({ top: (halfsc-iHeight/2)+$(window).scrollTop(), left: (halfscrn-iWidth/2) });
	
	
	$("#"+id_ok).click(function()
	{
		$(this).parents(".fullconfrim").remove();
		callback(cookie);
	});
	
	$("#"+id_cancel).click(function()
	{
		$(this).parents(".fullconfrim").remove();
	});
}

function RemoveComment()
{	
	var last=this.id.lastIndexOf('_');
	var com_id=this.id.substr(last+1,this.id.length);
	com_id=parseInt(com_id);
	
	var child=GetObjectClassByID(this);
	var statusId=child.GetComments().GetElement(com_id).GetId();
	var jObj=GetCommentSection(this);
	var jSatObj=GetStatusSection(this);
	
	var sld_id=ShowLoadingDialog(this,true);	
	
	$.post('/board/RemoveComment/',{id:statusId}, function(data)
	{
		child.GetComments().RemoveElement(com_id);
		jObj.empty();
		jObj.append(generateComents(child));
		$(".board_remove_comment").click(RemoveComment);
		$(".board_addcoment_input").keyup(AddComment);
		$(".board_addcoment_input").blur(AddComment);
		
		if(child.GetComments().GetCount()==1)
		{
			jSatObj.find('.board_show_other_comment').remove();
		}else if(child.GetComments().GetCount()>1)
		{
			jSatObj.find('.board_show_other_comment').replaceWith("<u class='board_show_other_comment'>Pokaz komentarze ("+child.GetComments().GetCount()+")</u>");
		}
		
		ShowLoadingDialog(sld_id,false);	
	});
	
}

//znajduje tag bedacy poczatkiem statusu
function GetTopParent(obj)
{
	if($(obj).attr('class')!="board_status_section")
		return $(obj).parents(".board_status_section");
	else
		return obj;
}

//Zwraca obiekt jquery statusu, elementu obj bedacym, tagiem statusu
function GetStatusSection(obj)
{
	return  $(obj).parents(".board_status_section");
}

function GetCommentSection(obj)
{
	return  GetTopParent(obj).children(".board_comment_section");
}

function GetShowHideCommentButton(obj)
{
	return  GetTopParent(obj).children(".board_show_other_comment");
}

//Zwraca Jquery tagu input dodawania komentarza
function GetAddCommentInput(obj)
{
	return GetCommentSection(obj).find(".board_addcoment_input");
}

//Zwraca odpowiednie pozycje w grupie lub na liscie glownej
function GetObjectClassPosition(obj,start,tn)
{	
	var str=GetTopParent(obj).attr('id');
	var pos=str.lastIndexOf('_');
	var id_elem=str.substring(start,pos);
	var id_list=str.substring(pos+1,str.length);
	if(tn)
		return parseInt(id_elem);
	else
		return parseInt(id_list);	
}

//funkcja zwraca obiek typu statusMesssage bedacym sparsowanym z xml statusem
function GetObjectClassByID(obj)
{	
	return GetObjectClass(GetTopParent(obj).attr('id'),4);
}

//TODO usunac zdublowane z GetObjectClassByID
function GetObjectClass(str,start)
{
	var pos=str.lastIndexOf('_');
	var id_elem=str.substring(start,pos);
	var id_list=str.substring(pos+1,str.length);
	
	var child=allMessageStatusTable.GetElement(id_elem);
	
	if(child.GetStatusType()!=9)
		child=MessageStatusTable[child.GetStatusType()].GetElement(id_list);
	
	return child;
}

//Ustawia widocznosc odpowiednich komenarzy
function ShowComents()
{			
	var child=GetObjectClassByID(this);
	var statusId=child.GetMessageId();
	var jObj=GetCommentSection(this);
	var textObject=this;
	
	if(!(child.IsUserFlag(FLAG_SHOW_COMMENTS)))
	{	
		var sld_id=ShowLoadingDialog(this,true);		
		
		$.post('/board/ReciveComments/',{id:statusId}, function(data)
		{	
			child.RemoveAllComments();
			$(data).find("comment").each(function () {	
				child.AddComment(this);
			});		
										
			child.AddUserFlag(FLAG_SHOW_COMMENTS);
			$(textObject).text('Ukryj komentarze');			
			$(jObj).empty();
			$(jObj).append(generateComents(child));
			$(".board_remove_comment").click(RemoveComment);
			ShowLoadingDialog(sld_id,false);
		});		
		
	}else{		
		child.RemoveUserFlag(FLAG_SHOW_COMMENTS);
		$(jObj).empty();
		$(jObj).append(generateComents(child));
		$(textObject).text('Pokaz komentarze ('+child.GetComments().GetCount()+')');
		$(".board_remove_comment").click(RemoveComment);
	}
	
}

//generuje html komentarzy
//child - obiekt sparsowanego xml statusu
function generateComents(child)
{
	var tags="";
	var comments=child.GetComments();
	var iCount=comments.GetCount();	
	
	if(!comments.IsEmpty())
	{
		
		if(!child.IsUserFlag(FLAG_SHOW_COMMENTS))//Pokaz ostatni komentarz
		{
				tags+="<div class='board_comment_in_rame'>"+
							"<div class='board_comment_img'>"+
								"<img class='board_image' src='"+comments.GetLastElement().GetAuthorImage()+"' />"+
							"</div>" +
							"<div class='board_comment_div'>"+
								"<b>"+comments.GetLastElement().GetAuthor()+" </b>" +
								"<i>"+comments.GetLastElement().GetText()+"</i>"+ 
							"</div>" +
							"<div class='board_comment_div'>"+
								"<i id='rcd_"+(iCount-1)+"' class='board_time_fieald'>"+transformDate(comments.GetLastElement().GetDate())+"</i>" +				 				
								(((comments.GetLastElement().GetPermission()&comments.GetLastElement().CPF_DELETE) ||
									(child.GetPermission()&child.SPF_DELETE))?"<u id='rcd_"+(iCount-1)+"' class='board_remove_comment'>Usun</u>":"")+
							"</div>"+
					  "</div>";
		}else{//Pokaz wszystkie komentarze
				for(var i=0;(i<iCount);i++)
				{				
					tags+="<div id='rcd_"+i+"' class='board_comment_in_rame'>"+
								"<div class='board_comment_img'>"+
									"<img class='board_image' src='"+comments.GetElement(i).GetAuthorImage()+"' />"+
								"</div>" +
								"<div class='board_comment_div'>"+
									"<b>"+comments.GetElement(i).GetAuthor()+" </b>" +
									"<i>"+comments.GetElement(i).GetText()+"</i>"+ 
								"</div>" +
								"<div class='board_comment_div'>"+
									"<i id='rcd_"+i+"' class='board_time_fieald'>"+transformDate(comments.GetElement(i).GetDate())+"</i>" +	
									(((comments.GetElement(i).GetPermission()&comments.GetLastElement().CPF_DELETE) ||
									 (child.GetPermission()&child.SPF_DELETE))?"<u id='rcd_"+i+"' class='board_remove_comment'>Usun</u>":"")+
								"</div>"+
					   "</div>";
				}								
		}
	}
	
//generuj formatke do dodawania komentarzy jezeli to potrzebne
	if(child.IsUserFlag(FLAG_SHOW_ADD_COMMENT_INPUT))
	{
		tags+="<div class='board_comment_in_rame'>"+
				"<div class='board_comment_img'>"+
					"<img class='board_image' src='"+iUserPhoto+"' />"+
				"</div>"+
				"<div class='board_comment_div2'>"+
					"<div class='board_comment_div'>Napisz kometarz</div>"+
					"<input class='board_addcoment_input' />" +		
				"</div>" +	
				"<div class='board_comment_loading_fieald'>"+
					
				"</div>"+
			  "</div>";
	}
	return tags;
}

//Generuje kod html pojedynczego statusu
//child - obiekt sparsowanego xml statusu
//id_elem - na jakiej pozycji jest status w kolejce glownej
//id_list - na jakiej pozycji jest status w zgrupowanej kolejce danego typu
function generateSingleStatus(child,dFlags,id_elem,id_list)
{
	var statusType=child.GetStatusType();
	var contentText=child.GetContent();
	var statusId=child.GetMessageId();
	var comments=child.GetComments();
	var iCount=comments.GetCount();	
	var iObjCount=child.GetObjectCount();
	
	var tags="<div id='gid_"+id_elem+"_"+id_list+"' class='board_status_section'>\
				<div class='board_status_item'>" +
						"<div class='board_status_item_caption'>" +
							"<div class='board_author'>" +
							(child.IsOvnerEqualAuthor()?("<a class='board_caption_link' href=''>"+child.GetAuthorFullName()+"</a>"):(child.GetAuthorFullName()+" > "+child.GetOwnerFullName()))+
							"</div>" +
							"<div class='board_menu'>" +
								"<span class='board_ext_ContextMenu2' style='visibility:hidden'>X</span>"+
								"<span class='board_ext_ContextMenu'>X</span>"+
								/*'<div class="menu bubplastic vertical">'+
									'<ul>'+
										(((child.GetPermission()&child.SPF_LOCK) && (statusType>0))?"<li class='board_contextmenu'><span class='board_lock_status' title='Blokuj'>Blokuj</span></li>":"") +
										((child.GetPermission()&child.SPF_HIDE)?"<li class='board_contextmenu'><span class='board_hide_status' title='Ukryj'>Ukryj</span></li>":"") +
										((child.GetPermission()&child.SPF_DELETE)?"<li class='board_contextmenu'><span class='board_delete_status' title='Usun'>Usuń</span></li>":"")+
									'</ul>'+
									'<br class="clearit" />'+
								'</div>'+*/					
							"</div>"+
						"</div>" +
						"<div class='board_status_item_body'>" +
							"<div class='board_status_item_body_img'>" +
								"<img class='board_image' src='"+child.GetAuthorImage()+"' />"+
							"</div>" +
							"<div class='board_status_item_body_other'>";								
								if(statusType==9)			
									tags+="<span>"+contentText+"</span>";							
								else
									tags+="<i>"+TableMessage[statusType]+"</i><br /><span>"+contentText+"</span>";
						
						tags+="</div>";
				 			if(iObjCount!=0)
				 			{
				 				tags+="<div class='board_status_item_body_other'>";
				 					var objects=child.GetObjectArrayList();					
				 					for(var i=0;(i<iObjCount);i++)
				 					{
				 						tags+=addObject(objects[i]);
				 					}
				 				tags+="</div>";
				 			}
				 tags+="</div>";
				 tags+="<div class='board_status_item_statusbar'>" +
				 				"<i class='board_status_time_fieald'>" + transformDate(child.GetDate())+"</i>";
				 				
				 			if(!comments.IsEmpty() && child.GetRealCommentCount()>1)
				 			{
				 				if(!child.IsUserFlag(FLAG_SHOW_COMMENTS))
								{				 					
				 					tags+="<u class='board_show_other_comment'>Pokaz komentarze ("+child.GetRealCommentCount()+")</u>";
								}else{
									tags+="<u class='board_show_other_comment'>Ukryj komentarze</u>";
								}
				 			}
				 			
				 			if(statusType!=9 && MessageStatusTable[statusType].GetCount()>1)
				 				if(dFlags&FLAG_GROUP)
				 				{
				 					tags+="<b class='board_show_group'>Rozwin grupe ("+MessageStatusTable[statusType].GetCount()+")</b>";
				 				}else{
				 					tags+="<b class='board_show_group'>Zwin grupe</b>";
				 				}
				 			
				 		tags+="<u class='board_add_comment'> Dodaj komentarz</u>"
				 tags+="</div>"+
				
				"</div>" +
				"<div class='board_comment_section'>";
				 		tags+=generateComents(child);
				tags+="</div>" +
			 "</div>";	
		iShowElements++;
		return tags;
}

//Zwraca html odpowiednio pojedynczego statusu lub rozwinietej grupy
//child - obiekt sparsowanego xml statusu
//id_elem - na jakiej pozycji jest status w kolejce glownej
//iTypePosition - na jakiej pozycji jest status w zgrupowanej kolejce typu 9
function generateStatus(child,id_elem,iTypePosition)
{	
	var statusType=child.GetStatusType();
	var iFlags=MessageStatusTable[statusType].GetData();
	var iCount=MessageStatusTable[statusType].GetCount();
	
	if(statusType==9)
	{
		return generateSingleStatus(child,iFlags,id_elem,iTypePosition);
	}else if(iFlags&FLAG_GROUP){ //Czy uzytkownik zostawil pogrupowany typ
		return generateSingleStatus(child,iFlags,id_elem,iCount-1);
	}else{ //Pokaz wszystkie elementy grupy
		var elements=MessageStatusTable[statusType].ToArray();
		var result="";
		for(var i=0;i<iCount;i++)
		{
			result=result+generateSingleStatus(elements[i],iFlags,id_elem,i);
		}
		return result;		
	}	
}

//Funkcja odpowiedzilna za utworzenie listy glownej (do wyswietlania)
//Sortuje
function consolideStatus()
{
	allMessageStatusTable=MessageStatusTable[9].Clone();//Stworz nowy stos z elementami typu 9
	
	//Dodajemy elementy z innych typow, ale tak by byly posortowane
	for(var i=0;i<9;i++)
		if(!MessageStatusTable[i].IsEmpty())
		{
			var elem=MessageStatusTable[i].GetFirstElement();
			
			//Porownujemy pokole daty statusow
			var tof=allMessageStatusTable.Find(elem,function(max,data){	
			return ((max.GetDateNumber()<data.GetDateNumber())?true:false);
			});
			
			allMessageStatusTable.InsertElement(tof,elem);			
		}
	
}

//Pokazuje ukryty tak embed
function ShowVideoFunc()
{	
	var emb=$(this).children("embed");	
	$(this).children("img").remove();//Usuwamy zwykly obrazek, by go zastapic filmem
	$(this).width(398);
	$(this).height(224);
	emb.width(398);
	emb.height(224);
	emb.show();
}

//Wychodzimy z trybu pelnoekranowego powiekszania zdiecia
function ImageFullScreenClose()
{	
	$(this).parent().remove();
}

//Powiekszamy klikniety obrazek
function ImageFullScreen()
{
	$("#boarditems").append(
	'<div>'+
	'<div class="fullscreendivbackground">'+
	'</div>'+
	'<div class="fullscreendiv">'+
	'<img class="fullscreendivimage" src="'+$(this).attr("src")+'" />'+
	'</div>'+
	'</div>');
	
	 var halfsc = $(window).height()/2;
	 var halfscrn = $(window).width()/2;
	 var objw = $(".fullscreendivimage").width()/2;
	 var objh = $(".fullscreendivimage").height()/2;
	 
	$(".fullscreendivbackground").height($("body").height()+80);
	 
	$(".fullscreendivbackground").click(ImageFullScreenClose);
	$(".fullscreendiv").offset({ top: (halfsc-objh-20)+$(window).scrollTop(), left: (halfscrn-objw-20) });
	//$(".fullscreendivimage").offset({ top: (halfsc-objh+10), left: (halfscrn-objw+10) });
	//$(".fullscreendiv").width(objw*2+40);
	//$(".fullscreendiv").height(objh*2+40);
	//$(".fullscreendiv").focusout(ImageFullScreenClose);

	//alert($(this).attr("src"));
}


function SetupEvents()
{
	$(".board_show_other_comment").click(ShowComents);
	$(".board_add_comment").click(ShowAddCommentDialog);
	$(".board_remove_comment").click(RemoveComment);
	$(".board_show_group").click(ShowGroup);
	$(".board_lock_status").click(blockStatus);
	$(".board_hide_status").click(hideStatus);
	$(".board_addcoment_input").blur(AddComment);
	$(".board_addcoment_input").keyup(AddComment);
	$(".board_delete_status").click(deleteStatus);
	//$(".board_ext_edit_status").click(editStatus);
	$(".board_ext_show_image_fullscreen").click(ImageFullScreen);
	$(".board_ext_show_video").click(ShowVideoFunc);
	$(".board_ext_ContextMenu").click(ShowStatusContextMenu);
	//$(".menu").mouseleave(HideStatusContextMenu);
	$(".board_status_section").mouseenter(OnMouseOverStatus);
	$(".board_status_section").mouseleave(OnMouseOutStatus);	
}

//Funkcja do wyswietlania statusow na tablicy
//tn - czy wykonac scalenie grup statusow
function ShowMessages(tn)
{
	
	if(tn)
		consolideStatus();
	
	$("#boarditems").empty();
		
	var list=allMessageStatusTable.ToArray();
	var iCount=allMessageStatusTable.GetCount();
	iShowElements=0;
	var iTypeNine=0;
	
	for(var i=0;(i<iCount);i++)
	{				
		$("#boarditems").append(generateStatus(list[i],i,iTypeNine));
		if(list[i].GetStatusType()==9)		
			iTypeNine++;
	}
	
	SetupEvents();
}